Датасет содержит информацию о деревьях, растущих на улицах Нью-Йорка, собранную в рамках проекта 2015 Street Tree Census волонтёрами и сотрудниками NYC Parks & Recreation и партнёрских организаций.
Собранные данные включают в себя информацию о видах деревьев, диаметре и оценку здоровья. Доступны сопроводительные данные, показывающие статус сбора и публикации данных по всему городу.
Данный отчёт содержит исследовательский анализ данных, в том числе следующие пункты: - превью данных - таблица с небольшой выборкой из датасета, - оценка количества пропусков в столбцах с помощью библиотеки missingno, - диаграммы попарного распределения признаков, - матрицу попарной корреляции между вещественными признаками, - карту расположения деревьев из датасета.
Описание данных
В следующей таблице приведено переведённое описание данных. Подробную информацию можно получить на сайте датасета.
№
Название столбца
Описание
Тип данных
1
tree_id
Уникальный идентификатор каждого дерева.
Число
2
block_id
Идентификатор, связывающий каждое дерево с блоком в таблице блоков/шейп-файле, в который оно отображается. (“Identifier linking each tree to the block in the blockface table/shapefile that it is mapped on.”)
Число
3
created_at
Дата и вермя создания записи.
Дата и время (datetime)
4
tree_dbh
Диаметр дерева, измеренный приблизительно в 137 см (54”) над землёй. Данные собраны как для мёртвых, так и для живых деревьев. Для пеньков используется признак stump_diam
Число
5
stump_diam
Диаметр пенька, измеренный через центр, округлённый до ближайшего целого. Диаметр измерен в дюймах.
Число
6
curb_loc
Расположение грядки (клумбы, газона), в которой находится дерево, относительно бордюра; деревья располагаются либо вдоль бордюра (OnCurb), либо со смещением от бордюра (OffsetFromCurb).
Текст
7
status
Статус, указывающий является ли дерево живым, стоящим мёртвым или пеньком.
Текст
8
health
Оценка здоровья дерева пользователем.
Текст
9
spc_latin
Название вида на латыни, например “Acer rubrum”.
Текст
10
spc_common
Обывательское название вида, например “red maple”.
Текст
11
steward
Indicates the number of unique signs of stewardship observed for this tree. Not recorded for stumps or dead trees.
Текст
12
guards
Указывает, присутствует ли ограждение (охрана?) и считает ли пользователь ее полезной или вредной. Для сухостойных деревьев и пней не отмечено.
Текст
13
sidewalk
Указывает, был ли один из краёв тротуара, непосредственно прилегающий к дереву, поврежден, треснут или поднят. Для сухостойных деревьев и пней не отмечено.
Текст
14
user_type
Поле содержит категорию пользователя, внёсшего запись в данные.
Текст
15
problems
Текст
16
root_stone
Указывает на наличие проблемы с корнями, вызванной брусчаткой на клумбе дерева.
Текст
17
root_grate
Указывает на наличие проблемы с корнями, вызванной металлическими решетками на клумбе дерева
Текст
18
root_other
Указывает на наличие других проблем с корнями.
Текст
19
trunk_wire
Указывает на наличие проблемы со стволом дерева, вызванной проволокой или веревкой, обернутой вокруг ствола.
Текст
20
trnk_light
Указывает на наличие проблемы со стволом, вызванной освещением, установленным на дереве.
Текст
21
trnk_other
Указывает на другие проблемы со стволом.
Текст
22
brch_light
Указывает на наличие проблемы с ветвями, вызванной освещением (обычно гирляндами) или проводами в ветвях.
Текст
23
brch_shoe
Указывает на наличие проблемы с ветками, вызванной кроссовками в ветках.
Текст
24
brch_other
Указывает на наличие других проблем с ветвями дерева.
Текст
25
address
Ближайший предполагаемый адрес к дереву.
Текст
26
postcode
Почтовый индекс.
Число
27
zip_city
Город, полученный из почтового индекса. Часто (но не всегда) это то же самое, что и район.
Текст
28
cb_num
Community board in which tree point is located.
Число
29
borocode
Код района, в котором расположено дерево: 1 (Манхэттен), 2 (Бронкс), 3 (Бруклин), 4 (Куинс), 5 (Стейтен-Айленд).
Число
30
boroname
Название района, в котором расположено дерево.
Текст
31
cncldist
Муниципальный округ, в котором находится дерево
Число
32
st_assem
Район Государственного собрания, в котором находится дерево. (State Assembly District in which tree point is located.)
Число
33
st_senate
Район Сената штата, в котором находится дерево. (State Senate District in which tree point is located.)
Число
34
nta
Код NTA, соответствующий районов по данным переписи населения США 2010 года, в который попадает дерево. (This is the NTA Code corresponding to the neighborhood tabulation area from the 2010 US Census that the tree point falls into.)
Текст
35
nta_name
Название NTA, соответствующее району по данным переписи населения США 2010 года, в который попадает дерево. (This is the NTA name corresponding to the neighborhood tabulation area from the 2010 US Census that the tree point falls into.)
Текст
36
boro_ct
Это идентификатор участка переписи, в который попадает дерево.
Число
37
state
Все строки меют одно и то же значение этого признака, равное “New York”.
Текст
38
latitude
Широта
Число
39
longitude
Долгота
Число
40
x_sp
Координата X в Государственной плоской системе координат (SPCS), используемой в США. Единица измерения футы. (X coordinate, in state plane. Units are feet.)
Число
41
y_sp
Координата Y в Государственной плоской системе координат (SPCS), используемой в США. Единица измерения футы. (Y coordinate, in state plane. Units are feet.)
Число
42
council_district
Муниципальный округ.
Число
43
census_tract
Переписной участок
Число
44
bin
Число
45
bbl
Число
Загрузка данных
Загрузка данных и их описания выполняется, если данные и описание не были загружены ранее.
%%bashif [ !-f ../../references/ny_tree_census_description.ptrees_problems ]; then echo "Загрузка описания датасета." poetry run python ../../src/data/get_data.py get-description echo "Загрузка завершена. Подробнее в ../../logs/src.logs.logs.log"else echo "Описание датасета было загружено ранее."fi
Загрузка описания датасета.
/dockeruser/.cache/pypoetry/virtualenvs/src-x7HGV2Ur-py3.11/bin/python: can't open file '/dockeruser/ny_tree_census/website/../../src/data/get_data.py': [Errno 2] No such file or directory
Загрузка завершена. Подробнее в ../../logs/src.logs.logs.log
Show the code
%%bashif [ !-f /dockeruser/ny_tree_census/data/raw/data.csv ]; then echo "Загрузка датасета." poetry run python ../../src/data/get_data.py get-data echo "Загрузка завершена. Подробнее в ../../logs/src.logs.logs.log"else echo "Датасет был загружен ранее."fi
Датасет был загружен ранее.
Анализ данных
Импорт модулей
Show the code
import matplotlibimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom plotly import express as pxfrom src.visualization import ( explore_cat_feature, explore_cat_vs_cat, explore_num_feature, plot_corr_matrix, review_data,)%matplotlib inline
Знакомство с данными
Вывод общей информации о датафрейме
Считаем загруженный ранее файл с датасетом и выведем общую информацию о нем.
Описательные статистики для категориальных признаков:
count
unique
top
freq
created_at
683788
483
2015-10-27T00:00:00.000
6852
curb_loc
683788
2
OnCurb
656896
status
683788
3
Alive
652173
health
652172
3
Good
528850
spc_latin
652169
132
Platanus x acerifolia
87014
spc_common
652169
132
London planetree
87014
steward
652173
4
None
487823
guards
652172
4
None
572306
sidewalk
652172
2
NoDamage
464978
user_type
683788
3
TreesCount Staff
296284
problems
652124
232
None
426280
root_stone
683788
2
No
543789
root_grate
683788
2
No
680252
root_other
683788
2
No
653466
trunk_wire
683788
2
No
670514
trnk_light
683788
2
No
682757
trnk_other
683788
2
No
651215
brch_light
683788
2
No
621423
brch_shoe
683788
2
No
683377
brch_other
683788
2
No
659433
address
683788
408701
106 CROSS BAY BOULEVARD
262
zip_city
683788
48
Brooklyn
177300
boroname
683788
5
Queens
250551
nta
683788
188
SI01
12969
nta_name
683788
188
Annadale-Huguenot-Prince's Bay-Eltingville
12969
state
683788
1
New York
683788
Дубликаты не обнаружены.
Выводы
Датасет не содержит дубликатов, но содержит пропуски. Пропуски не должны быть проблемой на этапе исследовательского анализа, однако их придётся обработать, прежде чем передать данные модели машинного обучения, если это будет необходимо.
Признаки tree_id, block_id, created_at содержат уникальный идентификатор дерева, уникальный идентификатор блока и дату создания записи. Не будем их рассматривать, по крайней мере, по началу.
Не имеет смысла исследовать признак state, так как данный столбце целиком заполенен значением “New York”.
Датасет содержит как категориальные, так и количественные признаки.
Cледующие признаки, хоть и были прочитаны с типом int64, с точки зрения своего физического смысла, являют категориальными: - zipcode;
- cb_num;
- borocode; - cncldist;
- st_assem;
- st_senate; - boro_ct; - council_district; - census_tract.
Признак tree_dbh
Количество пропусков: 0
Описательные статистики:
tree_dbh
count
683788.000000
mean
11.279787
std
8.723042
min
0.000000
10%
3.000000
25%
4.000000
50%
9.000000
75%
16.000000
90%
24.000000
max
450.000000
Форма распределения значений признака значительно отклоняется от формы нормального. Распределение имеет тяжёлый хвост и большое количество выбросов в большую сторону.
Признак может быть строго равен нулю. Скорее всего, значение данного признака равно нулю для пеньков. Согласно описанию данных диаметр пеньков заносится в признак stump_diam.
Рассмотрим распределение значений данного признак в диапазоне 0 < tree_dbh <= 100 более подробно.
Show the code
explore_num_feature( data=dataset.query("tree_dbh > 0 and tree_dbh <=100"), column_name="tree_dbh", bins=51,)
Признак tree_dbh
Количество пропусков: 0
Описательные статистики:
Признак stump_diam
Количество пропусков: 0
Описательные статистики:
stump_diam
count
683788.000000
mean
0.432463
std
3.290241
min
0.000000
10%
0.000000
25%
0.000000
50%
0.000000
75%
0.000000
90%
0.000000
max
140.000000
В датасете большинство наблюдений относится к деревьям, а не к пенькам, поэтому данный признак содержит абсолютное большинство нулей. Диаметр стволов деревьев заносится в признак tree_dbh.
Выберем только те записи, где диаметр пенька строго больше нуля и меньше или равен 100 и рассмотрим распределение диаметров повторно.
Show the code
explore_num_feature( data=dataset.query("stump_diam > 0 and stump_diam <= 100"), column_name="stump_diam", bins=51,)
Признак stump_diam
Количество пропусков: 0
Описательные статистики:
stump_diam
count
17644.000000
mean
16.691793
std
11.828303
min
1.000000
10%
4.000000
25%
7.000000
50%
14.000000
75%
23.000000
90%
33.000000
max
100.000000
Форма распределения значений признака значительно отклоняется от формы нормального. Распределение имеет тяжёлый хвост и большое количество выбросов в большую сторону.
Форма распределения значений диаметров пеньков напоминает форму распределения значений диаметров стволов tree_dbh, что закономерно.
Таким образом, признаки tree_dbh и stump_diam стоить попробовать объединить в один признак diam и рассматривать совместно.
latitude
Широта точки в которой расположено дерево на карте.
Признак latitude
Количество пропусков: 0
Описательные статистики:
latitude
count
683788.000000
mean
40.701261
std
0.090311
min
40.498466
10%
40.581956
25%
40.631928
50%
40.700612
75%
40.762228
90%
40.830693
max
40.912918
Форма распределения близка к форме нормального распределения, но имеет несколько мод, которые могут соответствовать центрам “кластеров” деревьев.
Позже мы рассмотрим распределение точек одновременно по признаку latitude и признаку longitude, а также нанесём точки с деревьями на карту, что позволит понять причину появления нескольких мод.
longitude
Долгота точки в которой расположено дерево на карте.
Признак longitude
Количество пропусков: 0
Описательные статистики:
longitude
count
683788.000000
mean
-73.924060
std
0.123583
min
-74.254965
10%
-74.131957
25%
-73.980500
50%
-73.912911
75%
-73.834910
90%
-73.770112
max
-73.700488
Форма распределения значительно отличается от формы нормального распределения. Распределение имеет как минимум две моды.
Позже мы рассмотрим распределение записей одновременно по признаку latitude и признаку longitude, а также нанесём точки с деревьями на карту, что позволит понять причину появления нескольких мод.
x_sp
Координата X в Государственной плоской системе координат (SPCS), используемой в США. Единица измерения футы.
Рассмотрим категориальный признак curb_loc, содержащий информацию о расположении грядки (клумбы, газона), в которой находится дерево, относительно бордюра; деревья располагаются либо вдоль бордюра (OnCurb), либо со смещением от бордюра (OffsetFromCurb).
Количество уникальных знаний: 3
Количество повторов уникальных значений признака status
Значение признака status
Количество повторений
0
Alive
652173
1
Stump
17654
2
Dead
13961
В датасете очень мало пеньков и мёртвых деревьев.
health
Рассмотрим категориальный признак health, содержащий оценку здоровья дерева пользователем.
Show the code
explore_cat_feature( data=dataset, column_name="health", title="Оценка здоровья дерева", xlabel="Количество наблюдений", ylabel="Оценка",)
Количество уникальных знаний: 3
Количество повторов уникальных значений признака health
Значение признака health
Количество повторений
0
Good
528850
1
Fair
96504
2
NaN
31616
3
Poor
26818
Состояние большинства деревьев оценено как хорошее, при этом признак, содержит некоторое количество пропусков. Вполне возможно, что эти пропуски соответствуют пенькам и мёртвым деревьям. Чтобы проверить эти гипотезу подсчитаем для каждого статуса дерева количество каждого значения признака health.
Количество уникальных знаний: 4
Количество повторов уникальных значений признака steward
Значение признака steward
Количество повторений
0
None
487823
1
1or2
143557
2
NaN
31615
3
3or4
19183
4
4orMore
1610
Признак можно рассматривать как ранговый и перекодировать целыми числами.
guards
Рассмотрим категориальный признак guards, содержащий информацию об ограждении вокруг дерева. Согласно описанию, признак содержит пропущенные значения для пней и мёртвых деревьев.
Количество уникальных знаний: 4
Количество повторов уникальных значений признака guards
Значение признака guards
Количество повторений
0
None
572306
1
Helpful
51866
2
NaN
31616
3
Harmful
20252
4
Unsure
7748
У большинства деревьев ограждения отсутствуют.
sidewalk
Рассмотрим категориальный признак sidewalk, который указывает, был ли один из краёв тротуара, непосредственно прилегающий к дереву, поврежден, треснут или поднят. Согласно описанию, признак содержит пропущенные значения для пней и мёртвых деревьев.
Show the code
explore_cat_feature( data=dataset, column_name="sidewalk", title="sidewalk\n(состояние края тротуара)", xlabel="Количество наблюдений", ylabel="sidewalk",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака sidewalk
Значение признака sidewalk
Количество повторений
0
NoDamage
464978
1
Damage
187194
2
NaN
31616
user_type
Рассмотрим категориальный признак user_type, который содержит категорию пользователя, внёсшего запись в данные.
Количество уникальных знаний: 3
Количество повторов уникальных значений признака user_type
Значение признака user_type
Количество повторений
0
TreesCount Staff
296284
1
Volunteer
217518
2
NYC Parks Staff
169986
Примечательно, что существенная часть данных добавлена волотнёрами.
root_stone
Рассмотрим категориальный признак root_stone, который указывает на наличие проблемы с корнями, вызванной брусчаткой на клумбе дерева.
Show the code
explore_cat_feature( data=dataset, column_name="root_stone", title="Проблемы с корнями\nиз-за брусчатки на клумбе", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака root_stone
Значение признака root_stone
Количество повторений
0
No
543789
1
Yes
139999
У большинства деревьев нет проблем с брусчаткой. Видимо, признак также указан и для пней и для мёртвых деревьев.
root_grate
Рассмотрим категориальный признак root_grate, который указывает на наличие проблемы с корнями, вызванной металлическими решетками на клумбе дерева.
Show the code
explore_cat_feature( data=dataset, column_name="root_grate", title="Проблемы с корнями\nиз-за решёток на клумбе", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака root_grate
Значение признака root_grate
Количество повторений
0
No
680252
1
Yes
3536
Проблемы, вызванные решётками встречаются очень редко. Похоже, признак также указан для пней и мёртвых деревьев.
root_other
Рассмотрим категориальный признак root_other, Который указывает на наличие других проблем с корнями.
Show the code
explore_cat_feature( data=dataset, column_name="root_other", title="Другие проблемы с корнями", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака root_other
Значение признака root_other
Количество повторений
0
No
653466
1
Yes
30322
У большинства деревьев нет проблем данной категории. Видимо, признак также указан и для пней и для мёртвых деревьев.
trunk_wire
Рассмотрим категориальный признак trunk_wire, который указывает на наличие проблем со стволом дерева, вызванной проволокой или веревкой, обернутой вокруг ствола.
Show the code
explore_cat_feature( data=dataset, column_name="trunk_wire", title="Проблемы со стволом\nиз-за проволоки или верёвки", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака trunk_wire
Значение признака trunk_wire
Количество повторений
0
No
670514
1
Yes
13274
Проблема встречается крайне редко. Похоже, признак также указан для пней и мёртвых деревьев.
trnk_light
Рассмотрим категориальный признак trnk_light, который указывает на наличие проблем со стволом дерева, вызванной освещением, установленным на дереве.
Количество уникальных знаний: 2
Количество повторов уникальных значений признака trnk_light
Значение признака trnk_light
Количество повторений
0
No
682757
1
Yes
1031
Проблема встречается настолько редко, что информативность данного признака ставится под вопрос.
trnk_other
Рассмотрим категориальный признак trnk_other, который указывает на наличие других проблем со стволом дерева.
Show the code
explore_cat_feature( data=dataset, column_name="trnk_other", title="Другие проблемы со стволом", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака trnk_other
Значение признака trnk_other
Количество повторений
0
No
651215
1
Yes
32573
Проблема встречается довольно редко и указана в том числе для пней и мёртвых деревьев.
brch_light
Рассмотрим категориальный признак brch_light, который указывает на наличие проблемы с ветвями, вызванной освещением (обычно гирляндами) или проводами в ветвях.
Show the code
explore_cat_feature( data=dataset, column_name="brch_light", title="Проблемы с ветвями из-за освещения", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака brch_light
Значение признака brch_light
Количество повторений
0
No
621423
1
Yes
62365
Проблема встречается довольно редко и указана в том числе для пней и мёртвых деревьев.
brch_shoe
Рассмотрим категориальный признак brch_shoe, который указывает на наличие проблемы с ветвями из-за кросовок в них.
Show the code
explore_cat_feature( data=dataset, column_name="brch_shoe", title="Проблемы с ветвями из-за кросовок", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака brch_shoe
Значение признака brch_shoe
Количество повторений
0
No
683377
1
Yes
411
Проблема встречается настолько редко, что информативность признака ставится под вопрос. Признак не содержит пропусков, а значит указан в том числе и для пней и для мёртвых деревьев.
brch_other
Рассмотрим категориальный признак brch_other, который указывает на наличие других проблем с ветвями.
Show the code
explore_cat_feature( data=dataset, column_name="brch_other", title="Другие проблемы с ветвями", xlabel="Количество наблюдений", ylabel="Наличие проблемы",)
Количество уникальных знаний: 2
Количество повторов уникальных значений признака brch_other
Значение признака brch_other
Количество повторений
0
No
659433
1
Yes
24355
Проблемы встречаются довольно редко, признак указан в том числе для пней и мёртвых деревьев.
zip_city
Рассмотрим категориальный признак zip_city, который содержит город, полученный из почтового индекса.
Количество уникальных знаний: 51
Количество повторов уникальных значений признака council_district
Значение признака council_district
Количество повторений
0
51.0
50865
1
19.0
33626
2
50.0
32948
3
23.0
30411
4
31.0
22763
5
49.0
20863
6
27.0
20061
7
32.0
19687
8
24.0
18620
9
30.0
18307
10
13.0
17433
11
46.0
16863
12
28.0
15635
13
20.0
14128
14
39.0
13837
15
29.0
13789
16
42.0
13083
17
43.0
13054
18
33.0
12740
19
17.0
11825
20
48.0
11802
21
45.0
11717
22
44.0
11648
23
22.0
11640
24
37.0
10995
25
34.0
10700
26
26.0
10659
27
12.0
10525
28
35.0
10497
29
18.0
9702
30
11.0
9655
31
38.0
9510
32
47.0
9200
33
36.0
9025
34
4.0
8649
35
3.0
8506
36
41.0
8207
37
9.0
7994
38
15.0
7921
39
25.0
7831
40
21.0
7810
41
8.0
7343
42
6.0
6947
43
40.0
6866
44
NaN
6519
45
7.0
6519
46
16.0
6495
47
14.0
6359
48
10.0
6137
49
2.0
5537
50
1.0
5404
51
5.0
4931
Большинство деревьев относится к муниципальному округу с номером 51.
Признак содержит небольшое количество пропусков, что может быть связано как с ошибками в данных, так и с особенностями административно-территорального деления в США.
spc_latin
Рассмотрим категориальный признак spc_latin, содержащий название вида дерева на латыни. Признак обладает высокой кардинальностью, поэтому выведем 50 наиболее часто встречающихся значений.
Количество уникальных знаний: 132
Количество повторов уникальных значений признака spc_latin
Значение признака spc_latin
Количество повторений
0
Platanus x acerifolia
87014
1
Gleditsia triacanthos var. inermis
64264
2
Pyrus calleryana
58931
3
Quercus palustris
53185
4
Acer platanoides
34189
5
Tilia cordata
29742
6
Prunus
29279
7
Zelkova serrata
29258
8
Ginkgo biloba
21024
9
Styphnolobium japonicum
19338
10
Acer rubrum
17246
11
Fraxinus pennsylvanica
16251
12
Tilia americana
13530
13
Acer saccharinum
12277
14
Liquidambar styraciflua
10657
15
Quercus rubra
8400
16
Tilia tomentosa
7995
17
Ulmus americana
7975
18
Acer
7080
19
Prunus cerasifera
6879
20
Quercus bicolor
6598
21
Acer platanoides 'Crimson King'
5923
22
Ulmus parvifolia
5345
23
Prunus virginiana
4888
24
Syringa reticulata
4568
25
Cercis canadensis
3801
26
Koelreuteria paniculata
3719
27
Malus
3527
28
Gymnocladus dioicus
3364
29
Quercus phellos
3184
30
Metasequoia glyptostroboides
3020
31
Crataegus
2988
32
Acer saccharum
2844
33
Acer pseudoplatanus
2731
34
Fraxinus
2609
35
Acer campestre
2550
36
Celtis occidentalis
2382
37
Quercus acutissima
2244
38
Maackia amurensis
2197
39
Carpinus betulus
2099
40
Acer ginnala
2049
41
Amelanchier
2032
42
Robinia pseudoacacia
1784
43
Quercus alba
1686
44
Quercus robur
1644
45
Ulmus pumila
1595
46
Cornus florida
1552
47
Carpinus caroliniana
1517
48
Quercus shumardii
1487
49
Quercus coccinea
1465
Чаще всех встречаются деревья вида Platanus x acerifolia (плантан кленолистный).
spc_common
Рассмотрим категориальный признак spc_common, содержащий обывательское название вида дерева. Признак обладает высокой кардинальностью, поэтому выведем 50 наиболее часто встречающихся значений.
Количество уникальных знаний: 132
Количество повторов уникальных значений признака spc_common
Значение признака spc_common
Количество повторений
0
London planetree
87014
1
honeylocust
64264
2
Callery pear
58931
3
pin oak
53185
4
Norway maple
34189
5
littleleaf linden
29742
6
cherry
29279
7
Japanese zelkova
29258
8
ginkgo
21024
9
Sophora
19338
10
red maple
17246
11
green ash
16251
12
American linden
13530
13
silver maple
12277
14
sweetgum
10657
15
northern red oak
8400
16
silver linden
7995
17
American elm
7975
18
maple
7080
19
purple-leaf plum
6879
20
swamp white oak
6598
21
crimson king maple
5923
22
Chinese elm
5345
23
'Schubert' chokecherry
4888
24
Japanese tree lilac
4568
25
eastern redbud
3801
26
golden raintree
3719
27
crab apple
3527
28
Kentucky coffeetree
3364
29
willow oak
3184
30
dawn redwood
3020
31
hawthorn
2988
32
sugar maple
2844
33
sycamore maple
2731
34
ash
2609
35
hedge maple
2550
36
common hackberry
2382
37
sawtooth oak
2244
38
Amur maackia
2197
39
European hornbeam
2099
40
Amur maple
2049
41
serviceberry
2032
42
black locust
1784
43
white oak
1686
44
English oak
1644
45
Siberian elm
1595
46
flowering dogwood
1552
47
American hornbeam
1517
48
Schumard's oak
1487
49
scarlet oak
1465
На первом месте всё также плантан кленолистный.
problems
Рассмотрим категориальный признак problems, содержащий информацию о проблемах с деревом. Признак обладает высокой кардинальностью, поэтому выведем 50 наиболее часто встречающихся значений и, на всякий случай, подсчитаем количество пропусков.
Show the code
print("Количество пропусков в столбце в полных данных: "f"{dataset.problems.isna().sum()}\n")explore_cat_feature( data=dataset, column_name="problems", n_top=50, title="Проблемы деревьев", xlabel="Количество наблюдений", ylabel="Проблема", figsize=(7, 10),)
Количество пропусков в столбце в полных данных: 31664
Количество уникальных знаний: 232
Количество повторов уникальных значений признака problems
Значение признака problems
Количество повторений
0
None
426280
1
Stones
95673
2
BranchLights
29452
3
Stones,BranchLights
17808
4
RootOther
11418
5
TrunkOther
11143
6
BranchOther
8352
7
Stones,TrunkOther
5183
8
Stones,RootOther
4468
9
WiresRope
4095
10
Stones,BranchOther
3786
11
TrunkOther,BranchOther
2477
12
WiresRope,BranchLights
2308
13
RootOther,TrunkOther
2137
14
MetalGrates
2098
15
Stones,WiresRope,BranchLights
1953
16
RootOther,BranchLights
1918
17
RootOther,TrunkOther,BranchOther
1807
18
TrunkOther,BranchLights
1558
19
Stones,TrunkOther,BranchOther
1539
20
RootOther,BranchOther
1503
21
Stones,WiresRope
1457
22
Stones,RootOther,TrunkOther
1360
23
Stones,TrunkOther,BranchLights
1176
24
Stones,RootOther,BranchLights
901
25
BranchLights,BranchOther
756
26
Stones,RootOther,BranchOther
743
27
Stones,RootOther,TrunkOther,BranchOther
617
28
RootOther,TrunkOther,BranchLights
540
29
Stones,BranchLights,BranchOther
526
30
Stones,RootOther,TrunkOther,BranchLights
495
31
RootOther,WiresRope,BranchLights
410
32
WiresRope,TrunkOther
325
33
RootOther,WiresRope
324
34
WiresRope,BranchOther
314
35
Stones,WiresRope,TrunkOther,BranchLights
256
36
TrunkLights,BranchLights
235
37
TrunkLights
218
38
MetalGrates,TrunkOther
218
39
WiresRope,TrunkOther,BranchLights
210
40
MetalGrates,BranchOther
208
41
Stones,MetalGrates
207
42
Stones,RootOther,WiresRope,BranchLights
202
43
MetalGrates,RootOther
159
44
Stones,TrunkOther,BranchLights,BranchOther
156
45
TrunkOther,BranchLights,BranchOther
154
46
RootOther,BranchLights,BranchOther
126
47
Stones,RootOther,WiresRope
124
48
Stones,RootOther,BranchLights,BranchOther
113
49
MetalGrates,TrunkOther,BranchOther
110
Признак содержит записи как об отдельных проблемах, так и об их комбинациях, перечисленных через запятую. Интересно, что признак также содержит пропуски.
Чаще всего деревья либо не имеют никаких проблем, либо имеют проблемы с камнями и осветительными приборами в ветвях. Закономерно, комбинации проблем встречаются значительно реже.
Чтобы понять какие отдельные проблемы встречаются чаще всего исключим из датасета деревья не имеющие проблем и записи, содержащие пропуски в данном столбце, разделим все комбинации проблем на отдельные проблемы и сосчитаем как часто они встречаются.
Show the code
trees_problems = ( dataset.query("problems != 'None' and problems.notna()") .set_index(keys=["tree_id", "problems"], drop=False) .drop(columns="tree_id") .problems.str.split(",") .explode() .rename_axis(index={"problems": "problems_str"}) .reset_index())explore_cat_feature( data=trees_problems, column_name="problems", title="Частота отдельных проблем деревьев", xlabel="Количество наблюдений", ylabel="Проблема", figsize=(10, 5),)
Количество уникальных знаний: 9
Количество повторов уникальных значений признака problems
Значение признака problems
Количество повторений
0
Stones
139999
1
BranchLights
62365
2
TrunkOther
32573
3
RootOther
30322
4
BranchOther
24355
5
WiresRope
13274
6
MetalGrates
3536
7
TrunkLights
1031
8
Sneakers
411
Подсчитаем количество отдельных проблем у одного дерева, для этого создадим признак problems_count и выясним как часто встречается разное количество проблем у одного дерева.
Show the code
explore_cat_feature( data=( trees_problems.assign( problems_count=lambda x: trees_problems.groupby( by=["tree_id", "problems_str"] ).problems.transform("count") ) ), column_name="problems_count", title="Количество отдельных проблем у одного дерева", xlabel="Количество наблюдений", ylabel="Количество отдельных проблем", figsize=(10, 5),)
Количество уникальных знаний: 9
Количество повторов уникальных значений признака problems_count
Значение признака problems_count
Количество повторений
0
1
162552
1
2
95500
2
3
38148
3
4
10096
4
5
1245
5
6
294
6
7
14
7
9
9
8
8
8
Чаще всего одно дерево имеет 1 - 2 отдельные проблемы, при этом, максимальное количество проблем равно 9.
Попробуем выяснить какие проблемы деревьев встречаются вместе. Будем рассматривать отдельные пары проблем.
Очевидно, разные пары проблем встречаются с разной частотой. Реже всех встречаются проблемы с кросовками и осветительными приборами на стволе. Чаще всех - проблемы только с камнями и проблемы только с осветительными приборами в ветвях и комбинация этих проблем. Реже всех встречаются проблемы с кросовками и комбинации этих проблем с другими. Примечательно, что в комбинациях присутствует каждая пара проблем и нет взаимоисключающих категорий.
Пары признаков latitude и y_sp, longitude и x_sp, bin и bbl показывают очень высокую корреляцию, скорее всего величины в этих парах связаны некоторой зависимостью. Для пар latitude и y_sp, longitude и x_sp такая высокая корреляция логична, так как это широта и долгота в разных системах координат. Причина высокой корреляции между bin и bbl остаётся загадкой, так как автору не известен физический смысл этих величин. Тем не менее достаточно будет рассмотреть по одному признаку из каждой пары.
Пары категориальных признаков
spc_latin и spc_common
Проверим нет ли ошибок в сопоставлении обывательского названия вида дерева с его названием на латыне. Для этого посчитаем какое максимальное количество названий на латыне соответствует каждому обывательскому названию и наоборот.
Show the code
print("Максимальное количество уникальных названий вида дерева","на латыне для каждого обывательского названия:", dataset.groupby("spc_common").spc_latin.nunique().max(),)print("Максимальное количество уникальных обывательских названий","вида дерева для каждого названия на латыне:", dataset.groupby("spc_latin").spc_common.nunique().max(),)
Максимальное количество уникальных названий вида дерева на латыне для каждого обывательского названия: 1
Максимальное количество уникальных обывательских названий вида дерева для каждого названия на латыне: 1
Таким образом, каждому уникальному названию дерева на латыне соответствует только одно уникальное обывательское название. Скорее всего, названия видов деревьев сопоставлены корректно, но не исключено, что для отдельных деревьев некорректно указано как название вида на латыне так и соответствующее обывательское название.
Совстречаемость проблем
Попробуем выяснить какие проблемы деревьев встречаются одновременно, для этого построим график, называемый Parallel Categories Diagram, из библиотеки Plotly для трёх наиболее часто встречающихся проблем, которым соответствуют значения Yes в следующих признаках: